/**
 * 业务格式化工具
 * 业务格式处理函数最好做成特定的，一般相同业务格式化方式都是相同的，比如时间格式化要不要具体到秒，日期间用什么分隔符都是产品设计时就确定的
 * 这种业务的格式化函数不要做成支持传格式的，因为每个地方都传格式不利于统一，开发也麻烦，当业务变化时也不利于统一修改
 * 比如原来系统时间要求日期是中划线分隔，然后代码中大量自己传格式参数，当需要变为斜杠分隔时需要多处去修改，不仅工程量大也很容易遗漏
 * 所以格式化函数做成特定的，比如单价、金额和重量这种数值的格式化，就应该写三个格式化函数，方便统一管理修改
 * @author luguoxiang
 * @date 2021-09-07
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
import { createDateFormatter, dateParse } from '@/soar';

const datetimeFormatter = createDateFormatter('YYYY-MM-DD hh:mm');
const dateFormatter = createDateFormatter('YYYY-MM-DD');
const monthFormatter = createDateFormatter('YYYY-MM');
const moneyOptions: Intl.NumberFormatOptions = { maximumFractionDigits: 2, minimumFractionDigits: 2 };
const priceOptions: Intl.NumberFormatOptions = {
  maximumFractionDigits: 2,
  minimumFractionDigits: 2,
  useGrouping: false,
};
/**
 * 金额格式化（2位小数）
 * @param value
 */
export function money(value: number) {
  // eslint-disable-next-line no-restricted-globals
  if (value === null || isNaN(value)) {
    return value;
  }
  // @ts-ignore
  return parseFloat(value).toLocaleString(undefined, moneyOptions);
}

/**
 * 单价格式化（2位小数）
 * @param value
 */
export function price(value: number) {
  // eslint-disable-next-line no-restricted-globals
  if (value === null || isNaN(value)) {
    return value;
  }
  // @ts-ignore
  return parseFloat(value).toLocaleString(undefined, priceOptions);
}

/**
 * 日期时间格式化
 * @param val
 */
export function datetime(val: any) {
  return datetimeFormatter(dateParse(val));
}

/**
 * 日期格式化
 * @param val
 */
export function date(val: any) {
  return dateFormatter(dateParse(val));
}

/**
 * 月份格式化
 * @param val
 */
export function month(val: any) {
  return monthFormatter(dateParse(val));
}
